package capaGrafica;

import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.UIManager;
import javax.swing.border.EmptyBorder;

import org.openstreetmap.gui.jmapviewer.Coordinate;

import capaNegocio.Inteligencia;
import capaNegocio.PedidoCliente;

import java.awt.Color;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.util.Calendar;
import com.toedter.calendar.JCalendar;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;

public class VentanaPedidos extends JDialog {

	private static final long serialVersionUID = 1L;
	private final JPanel contentPanel = new JPanel();
	private JTextField txtNombre;
	private JTextField txtLongitud;
	private JTextField txtLatitud;
	private JCalendar calendario;
	private static PedidoCliente nuevo;

	
	public static void main(String[] args) {
		
		try{
			UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
		}
		catch (Exception e){
			System.out.println("Error setting native LAF: "+e);
		}
		
		try {
			VentanaPedidos dialog = new VentanaPedidos();
			dialog.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
			dialog.setVisible(true);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	public VentanaPedidos() {
		// evento generado al cerrar la ventana con la X
		addWindowListener(new WindowAdapter() {
			
			@Override
			public void windowClosing(WindowEvent e) {
				elimnarUltimoPunto();
				volverAVentanaAnterior();
			}
		});
		setModal(true);
		setResizable(false);
		
		setTitle("Ingreso de pedidos");
		
		try{
			UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
		}
		catch (Exception e){
			System.out.println("Error setting native LAF: "+e);
		}
		
		setBounds(100, 100, 527, 542);
		getContentPane().setLayout(null);
		contentPanel.setBounds(0, 35, 525, -34);
		contentPanel.setBorder(new EmptyBorder(5, 5, 5, 5));
		getContentPane().add(contentPanel);
		contentPanel.setLayout(null);
		{
			JPanel buttonPane = new JPanel();
			buttonPane.setBounds(0, 471, 523, 35);
			buttonPane.setLayout(new FlowLayout(FlowLayout.RIGHT));
			getContentPane().add(buttonPane);
			{
				//evento boton ok
				JButton okButton = new JButton("OK");
				okButton.addMouseListener(new MouseAdapter() {
					@Override
					public void mouseClicked(MouseEvent e) {
						if(losDatosEstanOk()){
							crearPedidoCliente();
							volverAVentanaAnterior();
							
						}else{
							JOptionPane.showMessageDialog(contentPanel,"No ha ingresado nombre cliente","Por Favor Revisar"
									,JOptionPane.WARNING_MESSAGE);
						}
						
					}
				});
				
				okButton.setBackground(Color.WHITE);
				okButton.setActionCommand("OK");
				buttonPane.add(okButton);
				getRootPane().setDefaultButton(okButton);
			}
			{
				// evento boton cancel
				JButton cancelButton = new JButton("Cancel");
				cancelButton.setBackground(Color.WHITE);
				cancelButton.addActionListener(new ActionListener() {
					
					public void actionPerformed(ActionEvent arg0) {
						
						elimnarUltimoPunto();
						volverAVentanaAnterior();

					}
				});
				cancelButton.setActionCommand("Cancel");
				buttonPane.add(cancelButton);
			}
		}
		
		JLabel lblNombreCliente = new JLabel("Nombre Cliente");
		lblNombreCliente.setBounds(33, 38, 126, 27);
		getContentPane().add(lblNombreCliente);
		
		txtNombre = new JTextField();
		txtNombre.setBounds(163, 42, 284, 23);
		getContentPane().add(txtNombre);
		txtNombre.setColumns(10);
		
		JLabel lblCoordenada = new JLabel("Ubicacion:");
		lblCoordenada.setBounds(33, 122, 81, 27);
		getContentPane().add(lblCoordenada);
		
		JLabel lblLatitud = new JLabel("Latitud");
		lblLatitud.setBounds(163, 105, 73, 27);
		getContentPane().add(lblLatitud);
		
		JLabel lblLongitud = new JLabel("Longitud");
		lblLongitud.setBounds(163, 149, 73, 27);
		getContentPane().add(lblLongitud);
		
		txtLatitud = new JTextField();
		txtLatitud.setBounds(248, 105, 199, 23);
		getContentPane().add(txtLatitud);
		txtLatitud.setColumns(10);
		txtLatitud.setEditable(false);
		txtLatitud.setText(""+MainForm.getNuevaCoordenada().getLat());
		
		txtLongitud = new JTextField();
		txtLongitud.setColumns(10);
		txtLongitud.setBounds(248, 149, 199, 23);
		getContentPane().add(txtLongitud);
		txtLongitud.setEditable(false);
		txtLongitud.setText(""+ MainForm.getNuevaCoordenada().getLon());
		
		
		JLabel lblFecha = new JLabel("Fecha:");
		lblFecha.setBounds(33, 209, 81, 27);
		getContentPane().add(lblFecha);
		
		calendario = new JCalendar();
		calendario.setBounds(163, 217, 284, 219);
		getContentPane().add(calendario);
		
		
	}
	// metodos
	private boolean losDatosEstanOk() {
		
		boolean ret = txtNombre.getText().isEmpty() ? false : true;
		return ret;
	}
	
	private void crearPedidoCliente() {
		
		double latitud =  Double.parseDouble(txtLatitud.getText());
		double longitud = Double.parseDouble(txtLongitud.getText());
		
		int anio =calendario.getCalendar().get(Calendar.YEAR);
		int mes = calendario.getCalendar().get(Calendar.MONTH) + 1;
		int dia = calendario.getCalendar().get(Calendar.DATE);
		
		Fecha fecha = new Fecha(anio,mes,dia);
		Coordinate coordenada = new Coordinate(latitud,longitud);
		String nombre = txtNombre.getText();
		
		
		nuevo = new PedidoCliente(nombre, coordenada, fecha);
		Inteligencia.agregarPedido(nuevo);
		
	}

	private void elimnarUltimoPunto() {
		MainForm.getMapa().getMapMarkerList().remove(MainForm.getMapa().getMapMarkerList().size()-1);
		MainForm.getMapa().repaint();
	}

	private void volverAVentanaAnterior() {
		MainForm.habilitarVentana(true);
		setVisible(false);
		dispose();
	}
}
